#ifndef SIMPLE_IO_SOCKET_BASE_H
#define SIMPLE_IO_SOCKET_BASE_H

#include <string>
#include "session.h"

namespace simple {
    class SocketBase {
    public:
        /**
         * 设置监听端口
         */
        virtual void setPort(int port) noexcept = 0;

        /**
         * 设置监听模式
         *  SOCK_STREAM TCP
         *  SOCK_DGRAM UDP
         *  SOCK_RAW 原始套接字
         *  SOCK_SEQPACKET 顺序包套接字
         *  SOCK_RDM 可靠数据报套接字
         *  ...
         */
        virtual void setStyle(int style) noexcept = 0;

        /**
         * socket进入就绪状态
         */
        virtual bool ready() = 0;

        /**
         * socket进入等待, 接受用户请求, 阻塞当前线程
         */
        virtual bool accept() = 0;

        /**
         * 设置会话处理函数
         */
        virtual void setHandler(const std::function<void(Session *)> &) = 0;

        /**
         * 关闭socket
         */
        virtual void close() noexcept = 0;
    };
}
#endif //SIMPLE_IO_SOCKET_BASE_H
